package com.muyu.logbackdemo.result;

import com.muyu.logbackdemo.enums.ApiStatusEnum;
import lombok.Builder;
import lombok.Data;

/**
 * @ClassName: PageResultResponse
 * @Author: Zirun.Xin
 * @Date: 2025/3/19 15:41
 * @Version: 1.0
 * @Description: 分页响应拓展
 */
public class PageResultResponse<T> extends ResultResponse<T> {

    /**
     * 分页元数据信息
     */
    private PageInfo page;

    /**
     * 分页构造器（Lombok Builder实现）
     */
    @Builder(builderMethodName = "pagedBuilder")
    private PageResultResponse(int code, String message, T data, boolean success, PageInfo page) {
        super(code, message, data, success);
        this.page = page;
    }

    /**
     * 创建分页成功响应
     * @param data 业务数据列表
     * @param page 分页元数据
     * @param <T>  数据类型
     * @return 分页响应实例
     */
    public static <T> PageResultResponse<T> ok(T data, PageInfo page) {
        return PageResultResponse.<T>pagedBuilder()
                .code(ApiStatusEnum.SUCCESS.getCode())
                .message(ApiStatusEnum.SUCCESS.getDesc())
                .data(data)
                .success(true)
                .page(page)
                .build();
    }

    /**
     * 分页元数据内部类
     */
    @Data
    @Builder
    public static class PageInfo {
        /**
         * 当前页码（从1开始计数）
         */
        private int pageNumber;

        /**
         * 每页数据量
         */
        private int pageSize;

        /**
         * 总数据量
         */
        private long totalElements;

        /**
         * 总页数
         */
        private int totalPages;
    }
}